package com.controller;



import java.io.IOException;
import java.security.Principal;
import java.util.List;
import java.util.stream.Collectors;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.annotation.SendToUser;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.api.ApiUtils;
import com.entity.Greeting;
import com.entity.HelloMessage;
import com.entity.UserModel;
import com.service.UserData;

@RestController
public class DoctorController {
	
	/**
	 *  webSocketController.template.convertAndSend("/topic/hello",greeting) //广播
	 *	webSocketController.template.convertAndSendToUser(userId, "/message",userMessage) //一对一发送，发送特定的客户端
	 *  后面动态发送消息时，需要用到这个对象。 
	 */
	 public SimpMessagingTemplate template;
	 

 

    /**
     * 
     * 方法名：greeting
     * 功能描述我们利用注解来接受和广播websocket信息
     * 
     * spring websocket利用STOMP作为websocket的子协议，
     * 原因是stomp可以提供一种类似springmvc的编码方式，可以利用注解进行接收和发送消息以及和springmvc进行无缝的结合。
     *
     * @param message
     * @return
     * @throws Exception
     *
     * 作者： 超哥
     * 创建时间： 2016年8月13日 下午9:10:19
     *
     */
	
	/**
	 * @MessageMapping即可以用来类级别上也可以用在方法级别上，
	 * 类似springmvc，但是为不同的是，springmvc的路径是类路径/方法路径，中间是“/”，
	 * 例如/webSocket/xxxx,而websocket是用“.”来分开路径的，类路径.方法路径，
	 * 例如foo.handle来发送消息到特定路径
	 * 
	 * @SendTo可以把消息广播到路径上去，
	 * 例如上面可以把消息广播到”/topic/greetings”,
	 * 如果客户端在这个路径订阅消息，则可以接收到消息
	 */
  /* Principal principal ,存放用户的登录验证信息
	Message message，最基础的消息体，里面方有header和payload等信息
	@Payload 消息体内容
	@Header(“..”) 某个头部key的值
	@Headers, 所有头部key的map集合
	@DestinationVariable 类似springmvc中的@PathVariable*/
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(500); //
        System.out.println("hello");
        return new Greeting("Hello, " + message.getName() + "!");
    }
    
    
    @MessageMapping("/message")
    @SendToUser("/message")
    public Greeting userMessage(HelloMessage message,Principal principal) throws Exception {
        return new Greeting("Hellopapa, " + message.getName() + "!");
    }
    
    
    /**
     * 
     * 方法名：getDoctorList
     * 功能描述: 获取医生列表
     *
     * @return
     *
     * 作者： 超哥
     * 创建时间： 2016年8月16日 下午4:00:14
     *
     */
    @RequestMapping("/getDoctorList")
    public List<UserModel> getDoctorList(){
    	List<UserModel> models = UserData.initData();
    	List<UserModel>  userModels =   models.stream().filter(user->user.getType().equals("1")).collect(Collectors.toList());
        return 	userModels;
    }
    
    
    @RequestMapping("/login")
    public UserModel  login(String userName,HttpServletRequest request){
    	List<UserModel> models = UserData.initData();
    	UserModel user = null;
    	for (UserModel userModel : models) {
			if (userModel.getUserCode().equals(userName)) {
				user = userModel;
				try {
					user.setSessionId(ApiUtils.createToken());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				break;
			}
    		
		}
       return user;
    }
  

}